package io.gitee.binaryfox.firework;


/**
  * - 16 byte顺序字符串[8byte时间戳 1byte回拨位 2byte ServiceId 5byte序列号]序列号不在下一秒重置
 * - 总体趋势递增
 * - 支持时间到 8888年左右
 * - 支持3844台相同微服务之间id唯一
 * - 支持时钟回拨61次,61次后时间还小于上次回拨时间时通过消费未来时间确保ID不重复
 * - 支持监听时钟回拨告警或者其他业务处理
 * - 性能在多线程的时候表现良好(10000/ms 多与snowflake 4000/ms),理论上1s能生成1200wID
 * - 通过调用系统自己实现存取接口来确保下次启动加载回拨位和回拨最大时间
 */
public class FireWorkGenerator {
    private static FireWork fireWork;

    /**
     * 不考虑单例 没有必要,初始化时候一次调用即可
     *
     * @param serviceId
     */
    public static void init(int serviceId, FireWorkStepBackHandler handler) {
        fireWork = new FireWork(serviceId, handler);
    }

    public static String nextId() {
        return fireWork.nextId();
    }


}
